package net.biz.dao;

import java.util.HashMap;
import java.util.List;
import java.util.Map;

import net.biz.Page;
import net.biz.Pageable;

public interface NativeBaseDao {
	/**
	 * 分页查询非JPA管理的DTO对象
	 * @param sql
	 * @param params
	 * @param pageable
	 * @param clazz
	 * @return
	 */
	public <T> Page<T> findPage(String sql, Map<String, Object> params, Pageable pageable, Class<T> clazz);
	
	
	/**
	 * 返回列表
	 * @param sql
	 * @param params
	 * @param clazz
	 * @return
	 */
	public <T> List<T> findList(String sql, Map<String, Object> params, Class<T> clazz);
	
	/**
	 * 返回一个非JPA管理的DTO对象
	 * @param sql
	 * @param params
	 * @param clazz
	 * @return
	 */
	public <T> T findOne(String sql, Map<String, Object> params, Class<T> clazz);
	
	public int count(String sql, Map<String, Object> params);


	/**
	 * Excel 导出专用
	 * @Title: excelExportList 
	 * @param sql
	 * @param params
	 * @param class1
	 * @return
	 */
	List<Map<String, Object>> excelExportList(String sql, Map<String, Object> params, @SuppressWarnings("rawtypes") Class<? extends HashMap> class1);
	
	/**
	 * 查询
	 * 参数和值要一一对应
	 * @Title: findList 
	 * @param sql
	 * @param clazz
	 * @param params 参数
	 * @param values 值
	 * @return
	 */
	public <T> List<T> findList(String sql, Class<T> clazz, String[] params, Object... values) throws RuntimeException;

	/***
	 * 获取一个数据
	 * @Title: findOne 
	 * @param sql
	 * @param clazz
	 * @param params 参数
	 * @param values 值
	 * @return
	 */
	public <T> T findOne(String string, Class<T> class1, String[] strings, Object... values) throws RuntimeException;

 }
